[iOS 8] UIDocumentPickerViewController で iCloud ドキュメントを開く
UIDocumentPickerViewController
iOS 8 で UIDocumentPickerViewController というクラスが追加されました。UIDocumentPickerViewController は iCloud 上に保存されているドキュメントの一覧を表示し、選択できる画面を提供する View Controller です。分かりやすく例えると UIImagePickerViewController の iCloud ドキュメント版といったところでしょうか。
本稿では、この UIDocumentPickerViewController を使って iCloud ドキュメントを開く手順を解説します。
デバイスで iCloud Document を有効にする
UIDocumentPickerViewController を使うためには、iOS 8 を搭載しているデバイスの iCloud 設定で iCloud Drive が利用できるようにしなければいけません。まず設定を開き…
iCloud Drive がオフになっているので、ここをタップして…
「iCloud Drive にアップグレード」をタップします。
有効にしていない(または許可していない)場合、UIDocumentPickerViewController を呼び出しても iCloud ドキュメントを参照できません。以下のスクリーンショットは参照できない状態で呼び出した場合に表示される画面です。
プロジェクトの設定
iCloud ドキュメントを参照するには、まずプロジェクト設定の Capabilities の iCloud セクションの iCloud Documents を有効にする必要があります。
設定を変更したあとは Provisioning Profile を再生成する必要があるので注意してください。
UIDocumentPickerViewController を表示する
それでは適当な ViewController から呼び出してみましょう。今回は iWork (Pages, Numbers, Keynote) で作成したドキュメントを開いてみたいと思います(事前にいずれかのデータを作成しておいてください)。
import UIKit class SampleViewController : UIViewController, UIDocumentPickerDelegate { override func viewDidLoad() { super.viewDidLoad() // UIDocumentPickerViewControllerを開く let picker = UIDocumentPickerViewController(documentTypes: ["com.apple.iwork.pages.pages" as NSString], inMode: UIDocumentPickerMode.Open) picker.delegate = self presentViewController(picker, animated: true, completion: nil) } // MARK: UIDocumentPickerDelegate func documentPicker(controller: UIDocumentPickerViewController!, didPickDocumentAtURL url: NSURL!) { println(__FUNCTION__) println("opened url : \(url)") } func documentPickerWasCancelled(controller: UIDocumentPickerViewController!) { println(__FUNCTION__) } }
iCloud ドキュメントを開くには init(documentTypes:inMode:) イニシャライザを使います。
documentTypes には開く対象のファイルタイプを配列で渡します。ファイルタイプの仕様は Uniform Type Identifier Concepts に記載されているので、こちらを参考にセットします。iWork のドキュメントですが、Pages ファイルは com.apple.iwork.pages.pages を、Numbers ファイルは com.apple.iwork.numbers.numbers、Keynote は com.apple.iwork.keynote.keynote をそれぞれ使います。
mode には iCloud ドキュメントを参照するモードを設定します。これはつまり iCloud ドキュメントを開く目的です。単純にファイルを開きたいのであれば UIDocumentPickerMode.Open を、アプリ内に取り込みたいのであれば UIDocumentPickerMode.Import を設定します。
実行すると次のようになります。
ファイルを選択すると documentPicker:didPickDocumentAtURL が呼ばれ、ファイルパスが取得できます。
なお、iCloud ドキュメントにアクセスできるアプリは、iCloud Drive 設定から利用可否を制御できます。こちらがオフになっているとアプリから iCloud ドキュメントを参照することができなくなります。
まとめ
iWork のファイル以外にも、JPEG などの画像ファイルやテキストファイルなど、iCloud に保存してあるさまざまなファイルを開くことができます。サードパーティ製のアプリでも簡単に参照できるようになったということで、iCloud を利用する機会が増えそうですね。